package com.example.academic_affairs_system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.academic_affairs_system.model.dto.user.*;
import com.example.academic_affairs_system.model.entity.AasUser;

/**
 * 教务系统用户表 服务类
 *
 * @author hjx
 * @since 2023-01-31
 */
public interface IAasUserService extends IService<AasUser> {
  /**
   * 登录
   *
   * <p>登录后通过 {@link javax.servlet.http.HttpServletResponse} 进行数据追加以及重置刷新令牌并添加令牌至请求头
   *
   * @param dto 登录用户 dto
   */
  void login(LoginDTO dto);

  /**
   * 注册用户
   *
   * <p>从此处指定用户进行注册，该接口用于创建老师用户
   *
   * @param dto 注册用户 dto
   * @return {@link Integer} 是否注册成功
   */
  int register(RegisterDTO dto);

  /**
   * 重置密码
   *
   * <p>根据用户名称、学号以及联系方式，进行密码重置
   *
   * @param dto 重置密码所需要的信息
   * @return {@link String} 重置的密码
   */
  String resetPassword(RestPasswordDTO dto);

  /**
   * 修改密码
   *
   * @param dto 修改密码
   * @return {@link Integer} 影响行数
   */
  int editPassword(EditPasswordDTO dto);

  /** 退出登录 */
  void logout();

  /**
   * 增加用户
   *
   * <p>该接口用户增加学生的信息
   *
   * @param dto 添加学生信息的 dto
   * @return {@link String} 返回新增学生的学号
   */
  String addStudent(HandlerStudentDTO dto);

  /**
   * 修改用户信息
   *
   * @param dto 修改学生信息的 dto
   * @return {@link Integer} 是否修改成功
   */
  int edit(HandlerStudentDTO dto);

  /**
   * 删除用户
   *
   * <p>采取逻辑删除
   *
   * @param userId 用户 id
   * @return {@link Integer}是否删除成功
   */
  int delete(long userId);
}
